Table of Contents
Product Support	Ordering Information	Trademarks

How To Use Tracker

Tracker Basics

Database and System Properties	Forms and Reports

Tables	Macros

Queries	Modules

Reference

Creating a Distribution Version	International Considerations

Permission Settings	Deinstalling Tracker

Printing	Glossary


Product Support

The following resources will help you to find answers to your questions about Tracker:

- The Tracker User's Guide

- Online Help (you're reading it)

- The Tracker Release Notes

- Tips and Techniques

- The Product Support Fax Line


Tips and Techniques

Meaning of "Unlisted SID"

Determining the Cause of Printing Problems

Variations in the Appearance of Dotted Tab Leaders

Maximum Number of Printed Pages

Print Dialog Shortcuts

How to Change the Accelerator Key in the Help Menu

Blank Lines in Procedure Documentation Print at Half Height


Meaning of "Unlisted SID"

Names of users and groups are stored only in the workgroup (SYSTEM.MDA) file. Each user or group account is identified by a unique SID which is automatically assigned to the account by Access when the account is created.

When you log into Access, your name is found in the SYSTEM.MDA file and your corresponding SID is retrieved. If you create a new object in a database, you automatically become its owner. This is because Access attaches your SID to the object. The object and its reference to your SID are a part of the database, not a part of the SYSTEM.MDA file.

When you inspect an object using Tracker, Tracker will normally display the name of the object's owner. In order to find the owner's name, Tracker looks in the SYSTEM.MDA file to find the owner's SID.

In some cases, the owner's SID may not be listed in the current SYSTEM.MDA file. In these cases Tracker will display "Unlisted SID" in place of the owner's name.

Note: If you regularly work on the same databases in two locations (e.g. at work and at home), you may wish to consider using a single SYSTEM.MDA file at both locations.


Determining the Cause of Printing Problems

If you experience difficulties in printing Tracker output, the problem may be due to improper computer, network, or printer configuration.

To find out, try printing something else from within Access. For example, you might open a table and try printing a page of data. Be sure to use the same printer and Print Setup parameters that you are using to print Tracker output.

If you are unsuccessful, you should look for a problem in the configuration of your computer, network, or printer. Your network or database administrator may be able to provide assistance.


Variations in the Appearance of Dotted Tab Leaders

The appearance of dotted tab leaders on printed output is determined by the printed driver, and may vary from one type of printer to another.

For reasons of efficiency, Tracker does not draw individual dots on the report surface. Instead, Tracker requests (of Access) that a dotted line be drawn. Access passes this request along to the Windows printer driver when the output is formatted, and the printer driver ultimately decides how it will draw a dotted line. Some printer drivers (e.g. HP LaserJet) will draw a finely dotted line, while others (e.g. PostScript) will draw what amounts to a dashed line.


Maximum Number of Printed Pages

The maximum number of pages that Tracker can print at one time is 100. It is possible that more than 100 pages would be required to print all of the information about a very complex object. If you ever find that your Tracker output contains 100 pages, it is likely that some of the output is missing. In this case you will need to print the information in two separate runs, selecting only half as much information to be printed during each run.


Print Dialog Shortcuts

The print dialogs for forms, reports, and modules provide two large lists containing Unselected and Selected items.

To move a single item from one list to the other, double-click the item.

To move a series of items from one list to the other, select the first item to be moved and then press the left or right single arrow button. After the item has moved, the next item in the list will be selected automatically. By pressing the arrow button repeatedly, a series of items can quickly be moved from one list to the other.


How to Change the Accelerator Key in the Help Menu

Tracker is added to the Access Help menu during installation. By default, the first letter of the word "Tracker" is used as the accelerator key. This allows you to use a short key sequence to start Tracker. (Alt-H to open the Help menu, and then T to start Tracker.)

If you have installed other add-on products, the letter T may already be in use.

The following procedure allows you to use a different letter of the word "Tracker" as the accelerator key.

Step 1	Close all current Microsoft Access sessions.

Step 2	Change directory to the WINDOWS directory on your hard drive.

Step 3	Edit the file MSACCESS.INI using a text editor.

Step 4	Locate the [Menu Add-Ins] section of the file. In this section you will find the following line:

&Tracker==Tracker()

The letter following the ampersand (&) character will be used as the accelerator key. To use a letter other than T, move the ampersand. For example, to use R as the accelerator key for Tracker, the line should look like this:

T&racker==Tracker()

Note: The letters A and C are already assigned to items in the Help menu. You will need to choose either T, R, K, or E as the accelerator key for Tracker.

Step 5	Save your changes to the file MSACCES.INI.

Your new accelerator key will be in effect the next time you run Access.


Blank Lines in Procedure Documentation Print at Half Height

Most word processors provide two type of carriage returns. "Hard" carriage returns typically signal the beginning of a new paragraph, while "soft" carriage returns generally cause a new line to begin without ending the current paragraph.

Access text fields provide only one type of carriage return. To insert a carriage return and begin a new line in a text field, you would press Ctrl-Enter.

Paragraphs are usually separated from one another by a small amount of white space. To accomplish this separation in a text field, you would need to insert a blank line. When printed, this would normally result in a white space whose height was equal to that of a line of text.

Tracker improves the appearance and readability of your procedure documentation by printing blank lines at half the height of nonblank lines. If you need to achieve a full line of white space at some point in your documentation, just enter two blank lines.

Note: Half-height printing of blank lines does not apply to source code entered in the Access Basic field of the documentation form.


Product Support Fax Line

Technical support is provided free of charge to registered users via fax. Faxed replies to technical questions are usually furnished within 24 hours.

To submit a technical support question, please make a photocopy of the Technical Support Form on pages 40-41 of the Tracker User's Guide. After completing the form, fax it to Black Bear Systems at (814) 345-5661.

Important:  You must supply a valid Tracker serial number which is registered in your name in order to receive technical support.


Ordering Information

Pricing

Introductory price:	$ 99	(limited time offer)
Regular price:	$ 149

Policies

30-day money-back guarantee
Express shipping available
VISA / MasterCard / Check / Money Order welcome
Orders payable in U.S. funds drawn on a U.S. or Canadian bank

System Requirements

Microsoft Access version 1.1
Hard disk with 1 megabyte of free space
VGA or higher resolution display
Tracker is supplied on a single 3.5" high density diskette

For more information or to place an order, contact:

Black Bear Systems
114 Meadow Lark Road
Morrisdale PA 16858-9333
U.S.A.
Phone: (814) 345-5657
Fax: (814) 345-5661


Trademarks

Tracker is a trademark of Black Bear Systems.

Microsoft, Microsoft Windows, and Microsoft Access are registered trademarks of Microsoft Corporation.

HP LaserJet is a trademark of Hewlett-Packard Company.

PostScript is a registered trademark of Adobe Systems Incorporated.


Tracker Basics

Starting Tracker

The Topic List

The Property List

Inspecting Objects In Use

The MultiZoom Window

Standard Features


Starting Tracker

Tracker analyzes and documents all types of objects, including tables, queries, forms, reports, macros, and modules. You tell Tracker which object to inspect by selecting the object before activating Tracker. For example, to inspect a table you would first open the table in Design View and then select Tracker from the Help menu.

To view database and system properties, select the database window before starting Tracker.


The Topic List

Upon entering Tracker, you will notice a list of available topics at the right side of the Tracker screen. Topics will be listed only when they are relevant to the object being inspected. For example, if you are inspecting a form which does not have custom menus, the Menus topic will not appear in the topic list.

To select a topic, just click on its name.


The Property List

When you select a topic, Tracker displays information about that topic in the property list located at the left side of the Tracker window.

In most cases, the property list will be sorted on the data in the left column.

Unlike the property lists in Access, Tracker's property list cannot be edited. To change a setting you must exit from Tracker and make the change directly in Access.


Inspecting Objects In Use

You can inspect queries, forms, and reports in Datasheet View or Form View as well as in Design view.

Some properties of forms and reports, such as the visibility of controls, may change while the form or report is in use. In all such cases Tracker will display current property settings, which may not be the same as initial (design view) settings. If you wish to view the form or report's initial settings, switch to Design View before opening Tracker.


The MultiZoom Window

Sometimes an item displayed in the property  list is truncated because it is too long to fit on one line. In other cases, a property which appears to be fully visible may contain additional lines of information which are not shown. Items of this type are flagged by a paragraph mark (¶) appearing at the beginning of the property value.

To see multiline values or values that are not fully visible in the topic list, double-click the item in the property list. This will open the MultiZoom window.

In MultiZoom you can select any item in the property list for viewing, but you can only view one property at a time. The property value is displayed in the large, scrolling text box at the right. A Copy button is provided which makes it easy to copy the value to the clipboard.

In rare cases a property name may be so long that it is not fully visible in the property list. For this reason the selected property name is displayed in a long text field at the bottom of the MultiZoom window.


Standard Features

The following features are provided on many of Tracker's screens.

About Tracker...

Displays the About tracker dialog.

Condensed Output Mode

When depressed, all properties that have not been assigned a value will be omitted from the property list. This feature affects both interactively viewed as well as printed property lists.

Print...

Opens a print dialog, allowing you to print selected properties of the object you are currently inspecting.

Exit Tracker

Closes Tracker and restores your original context in Access.


Database and System Properties

To inspect database and system properties, select the Database Window and then select Tracker from the Help menu.

Topics

Sorting the Object List

Reliability Checklist


Database and System Topics

Tables	Lists all tables (except for system tables) in the current database, including table name, owner, creation time, and modification time.

Queries	Lists all queries in the current database, including query name, owner, creation time, and modification time.

Forms	Lists all forms in the current database, including form name, owner, creation time, and modification time.

Reports	Lists all reports in the current database, including report name, owner, creation time, and modification time.

Macros	Lists all macros in the current database, including macro name, owner, creation time, and modification time.

Modules	Lists all modules in the current database, including module name, owner, creation time, and modification time.

MSACCESS.INI File	Lists in outline form all sections of the MSACCESS.INI file. Sections are arranged alphabetically. Items within each section are listed in the order that they appear in the file.

Users	Alphabetically lists the names of all user accounts along with the names of all groups to which each user belongs.

Groups	Alphabetically lists the names of all group accounts along with the names of all users who are members of each group.

Import/Export Specs	Select an item in the Import/Export Specs list to display that import/export specification's properties. Field specifications are listed, including field start, width, and end position. Overlapping fields and gaps between fields are also flagged.


Sorting the Object List

When viewing tables, queries, forms, reports, macros, or modules, you can sort the object list by any column simply by pressing the button at the top of the column. If you then choose to print a hardcopy, the printed output will be sorted in the same fashion.


Reliability Checklist for Database and System Properties

Ownership

Each database is owned by the user who created the database. This user has the ability to change the permission settings for system tables.

Each database object (e.g. table, query, etc.) is owned by the user who created the object. This user has the ability to change the permission settings for the object.

Although Access does provide a way to limit access to existing objects, it does not provide a way to prevent users from creating new objects at will. Consequently, a multiuser application may eventually acquire new objects which are of unknown origin and value.

Tracker reveals the ownership of databases and database objects, so you can check with the owners to see whether their objects can be exported or deleted from the main application.

Modified Objects

Before publishing updated objects into a multiuser application, list all tables, queries, forms, reports, macros, and modules in order of modification time. Look for objects modified since the last time you published updates.

Modified objects could reflect "emergency fixes" that you made directly to the application. Before overwriting these objects, you might want to check to make sure that the fixes have been incorporated into the updated objects you are about to publish.

Modified objects could be symptomatic of less-than-adequate permission settings which allowed one or more users to modify the objects in some way. For example, if a user changed the print setup parameters when printing a report, they might have saved their own settings with the report.

Objects Created By Others

In maintaining a multiuser application, it is important to periodically review what objects exist and who owns them. Access does not provide a way for the developer to prevent users from creating new objects. A naive but well-meaning user could quickly create numerous, large tables using make-table queries. If forgotten, these large tables could remain in the application for weeks or months, causing continuous performance degradation. Even more importantly, the presence of numerous "foreign objects" in the database makes it more difficult for you and others to analyze the structure of your application.

Tracker lets you sort objects by owner, creation time, and modification time, so you can quickly locate new objects and identify their creators.

Educate Users

You can't prevent users from creating new objects in your application, however you might wish to educate them about a simple alternative.

Advise each user to create one or more local, personal databases to contain their own custom queries, reports, and other objects. Tables located in the main application may easily be imported or attached to the local database. If queries or other objects are also needed, copies of these may be imported as well.

The local, personal database will contain only the objects the user needs, so the user is likely to work more productively, especially since the objects the user creates cannot be accidentally modified or deleted, as would be the case if they were created in the main application.

If users wish to make queries, reports, and other database objects that they have created available to the community of users, suggest that they submit these objects to you for review and publication. That way you will have complete knowledge and control of the content of the main application. You will also have the opportunity to streamline, parametrize, secure, and document any new objects before they become a part of your application.

Import/Export Specifications

Tracker flags all overlapping fields and gaps between fields, so you can spot them in an instant. Both of these conditions are permitted by Access and may be intentional on your part, however we feel that we cannot understate the importance of checking for field alignment errors. Such errors are easy to make and could in some cases remain undetected for quite some time.


Inspecting Tables

To inspect a table, open the table in Design View and then select Tracker from the Help menu.

Key Terms

Topics

Reliability Checklist


Key Terms Related to Tables

Compound Index

Simple Index


Table Topics

Table Properties	Lists properties of the table itself, including ownership, creation time, and modification time.

Descriptions	Alphabetically lists the name of each field along with its corresponding description.

Datatypes	Alphabetically lists the name of each field along with its corresponding datatype. Text and binary datatypes include the field size (e.g. Text*50).

Formats	Alphabetically lists the name of each field along with its corresponding format specification.

Captions	Alphabetically lists the name of each field along with its corresponding caption.

Default Values	Alphabetically lists the name of each field along with its corresponding default value.

Validation Rules	Alphabetically lists the name of each field along with its corresponding validation rule.

Validation Text	Alphabetically lists the name of each field along with its corresponding validation text.

Indexes	All indexes are listed in a single list, including both simple  and compound indexes. The index name, shown in the left column, is always the exact name by which the index would be referred to in Access Basic when preparing for a seek operation.

Permissions	Lists explicit permission settings as established using the permissions dialog.

Implied Permissions	Lists actual permissions resulting from group memberships on a user-by-user basis.

Relationships	The Relationships list includes all relationships in which the table is involved. Select a relationship to display its properties.

Fields	The Fields list includes all fields contained in the table, listed in the same order that they appear in Table Design View. Select a field to display its properties.


Reliability Checklist for Tables

Field Descriptions

One of the most important things that you can do to prevent errors in all parts of your applications is to document the structure of the data they contain. Field descriptions are a crucial part of this documentation.

Especially important are fields containing codes which affect the flow of execution. For example, a field named "OrderType" might be intended to contain the values "OR", "CR", and "IN", meaning "Order", "Credit Memo", and "Invoice", respectively. Without documentation, you are likely to forget whether the code for credit memos is "CR" or "CM". This could easily lead to programming errors.

It seems as if field descriptions ought to be a part of nearly every database, yet it is surprising to see how many applications entirely lack them.

Some problems do not require high-tech solutions. Tracker's ability to print field descriptions is not a particularly ingenious feature, however we believe that it is one which will benefit you greatly if you use it as part of a consistent approach to documenting your applications.

Property Lists

Use Tracker to inspect datatypes, formats, captions, default values, validation rules, and validation text to ensure consistency and completeness. Tracker allows you to list any of these properties for all fields at once, so inconsistencies and omissions are easy to spot.

Obsolete Indexes

Inspect the index list displayed by Tracker. Look for indexes which may have become unnecessary as your application design has evolved.

For example, at one point it may have been anticipated that users would need to perform fast searches based upon a client's first name. For this reason the FirstName field may have been indexed. If you no longer expect to provide first name searching, you will achieve better performance and improved storage economy by eliminating the FirstName index.

Redundant Indexes

Also look for redundant indexes. For example, if a table contains a compound index based upon the fields (LastName, FirstName), there is little value in having a simple index based upon the field LastName.

In general, if the fields used in one index are also used in the same relative order as the outermost fields of another index, the first index is redundant.


Inspecting Queries

To inspect a query, open the query in Design View and then select Tracker from the Help menu.

Key Terms

Topics

Tracker Inspects Version Last Saved

Understanding Logic Diagrams

Simplified WHERE and HAVING Clauses

Reliability Checklist


Key Terms Related to Queries

Boolean expression

fixed column headings

GROUP BY clause

HAVING clause

logic diagram

ORDER BY clause

QBE grid

simplified logic

WHERE clause


Query Topics

Query Properties	Lists properties of the query itself, including ownership, creation time, and modification time.

Query Parameters	Lists query parameters in the same fashion that they appear in the Query Parameters dialog.

Permissions	Lists explicit permission settings as established using the permissions dialog.

Implied Permissions	Lists actual permissions resulting from group memberships on a user-by-user basis.

Field Specifications	Lists field specifications as they appear in the "Field" row of the QBE grid.

Output Fields	Output fields are fields that would be present in the query's output if the query were executed. Output fields are displayed for select and make table queries only.

In all cases where an asterisk (*) is used as a field specification, all fields implied by the asterisk will appear in the output fields list. Please note that in such cases the content of the Output Fields list depends upon the structure of the source table(s). If a source table is redesigned, the query's output fields may change even though the query itself has not been modified.

Output fields are always listed in the same order that they would appear in the query's output if the query were executed.

Select an item in the Output Fields list to display an output field's properties.


Tracker Inspects Query Version Last Saved

Microsoft Access stores your queries in a system table called MSysQueries. This table is updated each time you save your changes to a query.

Tracker obtains information about your queries from the MSysQueries table. This means that if you make changes to a query and then open Tracker without first saving the changes, the changes will not be visible in Tracker.


Understanding Logic Diagrams

Flow of logic

Logic diagrams normally "flow" from left to right, with a set of input terms at the left and a single output line at the right. All inputs and outputs are Boolean (True/False) values.

Gates

A logic diagram normally contains one or more "gates". Each gate performs an elementary AND or OR operation on two or more True/False inputs to produce a single True/False output.

Trivial Logic

A trivial logic diagram consists of a single input line, a single output line, and zero gates. Tracker does not print trivial logic diagrams.

Simplified Expressions

Tracker prints logic diagrams for simplified WHERE and HAVING clauses if the simplification process results in an expression containing fewer terms.

Term-for-Term Alignment

When displaying WHERE and HAVING clauses as text, Tracker always lists the component terms of an expression in the same order that the input terms would appear in a corresponding logic diagram. This feature makes it easier to see the correspondence between a WHERE clause or a HAVING clause and its logic diagram.


Simplified WHERE and HAVING Clauses

If you program in Access Basic and make use of SQL statements, you may find it useful to create temporary queries so that Access will write SQL statements for you. After designing a query in the QBE grid, select the View menu and choose SQL. You can easily copy an SQL statement to the clipboard and then paste it into your code.

If a query contains complex criteria, the WHERE and or HAVING clauses of the SQL statement may be quite lengthy. This can make your code difficult to read and maintain.

In many cases Tracker provides simplified versions of WHERE and HAVING clauses. These will be listed under the Query Properties topic. Double-click the item to open the MultiZoom window, and then press the Copy button to copy the text to the clipboard for pasting into your Access Basic code.


Reliability Checklist for Queries

Query Criteria

Look for logic errors in query criteria. Tracker's logic diagrams can make complex criteria easier to grasp, and logic errors easier to spot.

If you are interacting with a customer whose requirements have shaped the design of the query, you might consider having the customer review the logic diagram(s) as a way of ensuring that you have correctly understood the requirements.

Run with Owner's Permissions

Be sure to check the setting of the Run with Owner's Permissions property. This property controls whether users executing the query will do so with their own permissions or with those of the query's owner.


Inspecting Forms and Reports

To inspect a form or a report, open the form or report in Design View and then select Tracker from the Help menu.

You can also inspect forms and reports while they are in use (in Form View). Some properties of forms and reports, such as the visibility of controls, may change while the form or report is in use. In all such cases Tracker will display current property settings, which may not be the same as initial (design view) settings. If you wish to view the initial settings of the form or report, switch to Design View before opening Tracker.

Key Terms

Topics

Special Features

Conventions

Limitations

Reliability Checklist


Key Terms Related to Forms and Reports

active control

datasheet properties

datasheet view

event properties

grouped checkbox

grouped option button

grouped toggle button

passive control

standalone checkbox

standalone option button

standalone toggle button


Form and Report Topics

Form/Report Properties	Lists properties of the form or report itself, including ownership, creation time, and modification time.

Datasheet Properties	Lists properties of the form which affect its appearance in datasheet view. Applies only to forms.

Print Setup	Lists properties established in the Print Setup dialog. These properties are stored with each form or report and serve as default print setup values.

Menu Outline	Displays an outline of the form's menu structure, including all corresponding macro references. Applies only to forms.

Accelerator Keys	Alphabetically lists all accelerator keys defined for the form and the corresponding label text. Applies only to forms.

Event Properties	Lists all event properties that have been assigned. Event properties which are macro references are checked. If no such macro exists in the current database, the entry is appropriately flagged.

Control Sources	Alphabetically lists the name of each control along with its corresponding control source.

Formats	Alphabetically lists the name of each control along with its corresponding format specification.

Default Values	Alphabetically lists the name of each control along with its corresponding default value. Applies only to forms.

Status Bar Text	Alphabetically lists the name of each control along with its corresponding status bar text. Applies only to forms.

Validation Rules	Alphabetically lists the name of each control along with its corresponding validation rule. Applies only to forms.

Validation Text	Alphabetically lists the name of each control along with its corresponding validation text. Applies only to forms.

Help Context ID's	Alphabetically lists the name of each control along with its corresponding help context id. Help context id's are given both in decimal and in hexadecimal format. Applies only to forms.

Fonts	Alphabetically lists the name of each control along with a description of the corresponding font.

Permissions	Lists explicit permission settings as established using the permissions dialog.

Implied Permissions	Lists actual permissions resulting from group memberships on a user-by-user basis.

Group Level Properties	Select the name of a group level in the topic list to display that group level's properties. Applies only to reports.

Section Properties	Select the name of a form or report section in the topic list to display that section's properties. Any controls contained in the section will be listed in the Controls list.

Control Properties	Select an item in the Controls list to display that control's properties.


Special Features for Inspecting Forms and Reports

Control Type	Select Active, Passive, or All.

Control Order	Select Name, Type, or Location.

When you select Type or Location, all controls having the same type or location are ordered by name.


Conventions for Forms and Reports

Color Names

Font Properties

Background Properties

Border Properties


Conventions for Color Names

All color values are stored by Microsoft Access as 24-bit integer values, with 8 bits each for the red, green, and blue components of the color. This allows the developer to select any one of 16777216 possible color values. This provides great flexibility with color schemes, however most developers make frequent use of the 16 standard colors available on the color palette. Because these 16 colors are so frequently used, and because their integer values are in no way suggestive of their appearance, Tracker lists these colors by name rather than by value.

Tracker Color Name	Access Color Value

@ Black	0
@ Dark Gray	8421504
@ Light Gray	12632256
@ White	16777215
@ Red	255
@ Yellow	65535
@ Green	65280
@ Cyan	16776960
@ Blue	16711680
@ Magenta	16711935
@ Dark Red	128
@ Yellow Ochre	32896
@ Dark Green	32768
@ Teal Blue	8421376
@ Dark Blue	8388608
@ Purple	8388736

Tracker lists all other colors by value.


Conventions for Font Properties

Tracker combines the Font Name, Font Size, Font Weight, Font Italic, and Font Underline properties into a single property called "Font".

For example, the following settings:

Font Name	Arial
Font Size	10 pt
Font Weight	Bold
Font Italic	Yes
Font Underline	No

would be displayed by Tracker as:

Font	Arial Bold Italic 10 pt


Conventions for Background Properties

Tracker combines the Back Style and Back Color properties into a single property called "Background".

For example, the following settings:

Back Style	Normal
Back Color	8388608

would be displayed by Tracker as:

Background	Dark Blue

and these settings:

Back Style	Clear
Back Color	8388608

would be displayed by Tracker as:

Background	Clear


Conventions for Border Properties

Tracker combines the Special Effect, Border Style, Border Color, and Border Width properties into a single property called "Border".

For example, the following settings:

Special Effect	Color
Border Style	Normal
Border Color	8421376
Border Width	3 pt

would be displayed by Tracker as:

Border	Teal Blue 3 pt

and these settings:

Special Effect	Sunken
Border Style	Normal
Border Color	0
Border Width	Hairline

would be displayed by Tracker as:

Border	Sunken


Tracker Limitations Related to Forms and Reports

Tab Order

Microsoft Access version 1.1 provides no documented method for programmatically obtaining the tab order of a form's controls. Consequently, Tracker cannot provide this information.

Status Bar Obscured

Tracker does not close the Toolbox, Palette, Field List, Property List, or Sorting and Grouping Window. If any of these windows is covering the status bar before Tracker is opened, the status bar will remain covered while Tracker is in use.


Reliability Checklist for Forms and Reports

Property Lists

Use Tracker to inspect control sources, formats, default values, status bar text, validation rules, validation text, help context id's, and fonts to ensure consistency and completeness. Tracker allows you to list any of these properties for all controls at once, so inconsistencies and omissions are easy to spot.

Dynamic Behavior

Closely inspect the event properties of the form or report. Look for macro references that Tracker has flagged as undefined. Also look for function or macro calls which are vestiges of an earlier phase of development and or no longer needed or desired.


Inspecting Macros

To inspect a macro, open the macro in Design View and then select Tracker from the Help menu.

Key Terms

Topics

Special features

Tracker Inspects Version Last Saved

Finding Macro Call Sites

Reliability Checklist


Key Terms Related to Macros

macro call site

macro group


Macro Topics

Macro Properties	Lists properties of the macro itself, including ownership, creation time, and modification time.

Permissions	Lists explicit permission settings as established using the permissions dialog.

Implied Permissions	Lists actual permissions resulting from group memberships on a user-by-user basis.

Macro Call Sites	Lists all macros contained in the current macro group, and identifies all places within the current database from which each macro is referenced.


Special Features for Inspecting Macros

Analyze

Performs a scan of all forms, reports, and macros in the current database. Locates all references to the current macro.


Tracker Inspects Macro Version Last Saved

Microsoft Access stores your macros in a system table called MSysMacros. This table is updated each time you save your changes to a macro.

Tracker obtains information about your macros from the MSysMacros table. This means that if you make changes to a macro and then open Tracker without first saving the changes, the changes will not be visible in Tracker.


Finding Macro Call SItes

When you press the Analyze button, Tracker inspects each form, report, and macro in your database to locate all references to the current macro.

Microsoft Access does not provide a way to open a report hidden. Consequently, you may notice a portion of the toolbox, palette, property list, field list, or sorting and grouping dialog appearing momentarily at the bottom of your screen as each report is scanned by Tracker. This behavior is normal.


Reliability Checklist for Macros

Unused Macros

Inspect the list of macro call sites. Consider eliminating any macros which are not used. Unused items add complexity, and this can lead to errors.

Macro Calling Context

Make certain that the macro is prepared to function properly in every context that it may be invoked. If a macro is called from several locations, it may function properly in some cases and not in others. The list of call sites will help you to avoid overlooking any of the situations in which the macro can be called.

Macro Code Listing

Tracker can provide a printed macro code listing which will allow you to see all of the macro actions and their parameters at one time. This will help you to more easily spot any problems that you might have previously overlooked.


Inspecting Modules

To inspect a module, open the module in Design View and then select Tracker from the Help menu.

Key Terms

Topics

Special Features

Documentation: The Key to Reliability

Source Code Compression

Reliability Checklist


Key Terms Related to Modules

exported identifier

formal parameter

procedure

unused constant

unused parameter

unused procedure

unused variable


Module Topics

Module Properties	Lists properties of the module itself, including ownership, creation time, modification time, nunber of procedures, and number of lines.

Permissions	Lists explicit permission settings as established using the permissions dialog.

Implied Permissions	Lists actual permissions resulting from group memberships on a user-by-user basis.

Private Procedure Headings

Lists the name and procedure heading of each private procedure contained within the module.

Global Procedure Headings

Lists the name and procedure heading of each global procedure contained within the module. Also displays all procedures declared using the DECLARE statement.

Analysis Summary	Displays a summary of the analysis performed on the module, listing the number of global constants, global variables, user-defined types, unused private procedures, unused local constants, unused local variables, and unused parameters.

Global Constants	Alphabetically lists each global constant along with its value.

Global Variables	Alphabetically lists each global variable along with its datatype.

User-Defined Types	Alphabetically lists each user-defined type along with an indication of whether it is used in the module.

Unused Procedures	Alphabetically lists the name of each unused private procedure along with the size of the procedure in lines and in bytes.

Unused Constants	Alphabetically lists the name of each procedure containing unused local constants, along with the names of the unused constants.

Unused Variables	Alphabetically lists the name of each procedure containing unused local variables, along with the names of the unused variables.

Unused Parameters	Alphabetically lists the name of each procedure containing unused formal parameters, along with the names of the unused parameters.

Procedure Properties	Select an item in the procedure list to display that procedure's properties.


Special Features for Inspecting Modules

Analyze

Performs a scan of all code in the current module. Locates global constants, global variables, user-defined types, unused private procedures, unused local constants, unused local variables, and unused parameters.

Document

Opens the documentation window and displays documentation for the procedure currently selected in the procedure list. If no procedure is currently selected, the first procedure is selected automatically.

Save Compressed Text

Opens the Save Compressed Text dialog, allowing you to save a compressed version of the module text from which all comments, blank lines, and indentation have been removed.


Documentation: The Key to Reliability

If you've ever had to make modifications to source code that you had written several months earlier, then you know how important it is to document your source code. Tracker helps you to document more effectively in two important ways:

Internal Documentation

Tracker allows you to create a distribution version of your application from which all comments have been automatically removed. This means that you can liberally comment your source code without paying a penalty in terms of application size.

External Documentation

Tracker provides a system for you to easily produce and maintain documentation similar in appearance to that contained in the Microsoft Access Language Reference. Tracker takes care of the formatting, so all that you have to do is supply the text.

Editing Documentation

How Documentation is Stored


Editing Documentation

To document the current procedure, press the Document button, or double-click an item in the procedure list to document that procedure.

Arrow buttons allow you to move up or down one procedure at a time. Select any procedure from the drop-down list to move directly to that procedure. Changes to the current record are saved automatically when you move to another record or exit from the documentation window.

The Default button will construct a syntax line using information from the procedure heading. If there are comments in the source code located above the procedure heading, these will be inserted in the remarks field.

Default values for Syntax and Remarks may be separately requested by placing the cursor in the appropriate field and pressing Ctrl-Alt-Spacebar.

You can undo changes to the current field by pressing <Escape>. To undo all changes to the entire record, press the Undo button.

Boldface Type	To make any word or phrase print in boldface type, enclose it in curly braces, like this:

    normal text {bold text} normal text

Newline	To start a new line in a text field, press Ctrl-Enter.

Example Fields	There are two fields under the Example heading. The first of these should contain a brief description of what the example code does. The second, larger field should contain the example code itself.

The larger field uses the Courier font, which is a fixed-pitch font, so you can use spaces to format your code as you would in the module window. You cannot use curly braces to make example code bold.

You can copy sample code from the module window onto the clipboard, and then paste the code directly into the example code field. This field is limited to 32000 characters.


How Documentation Is Stored

%TSysProcedures Table

All procedure documentation is stored in a table named %TSysProcedures. Tracker will create this table automatically in your database the first time you save documentation for any procedure. Each procedure's documentation is stored as a single record in %TSysProcedures containing the following fields:

Module
Procedure
Description
Syntax
Remarks
SeeAlso
Example
ExampleCode

The primary key of %TSysProcedures is (Module, Procedure). Tracker relies upon this primary key to locate the documentation for each procedure that you document.

Renamed Procedure

If you rename a procedure you will need to change the procedure name in the corresponding record in %TSysProcedures.

Renamed Module

If you rename a module you will need to replace all occurrences of the previous module name with the new module name in the Module field.

Mass Updates

You can edit the documentation directly in the table if you wish. This is helpful when you need to replace all occurrences of one word or phrase with another.

Import/Export

You can also import existing documentation into this structure or export it for offline editing or printing.

Structural Changes

You may add additional fields to the %TSysProcedures table if you wish. You must not alter the structure of the eight original fields.


Source Code Compression

In a traditional programming language, such as C or Fortran, source code is compiled to produce an executable which is then supplied to the end users. All elements of the source code which do not affect execution are omitted from the executable. In the Access environment there is no special compilation step. Compilation is performed automatically by Access each time a database is opened. Consequently, when you distribute an Access application that you have written, you are distributing your source code.

Fortunately, Access provides a security system which allows you to prevent end-users from inspecting your source code in the module window. In addition, Access provides an encryption function which makes your source code virtually impossible to reverse engineer using a word processor or a utility program. However, you may prefer not to make use of the encryption feature if you are interested in achieving the highest possible level of performance.

Access Basic code is not stored as text, so anyone who tries to bypass the security mechanism by inspecting the database file with a word processor or a utility program will have a very difficult time of figuring out your source code. The same is NOT true of your source code comments. These would be plainly visible. If you've done a good job of commenting your code, it will read like a book!

Tracker's Save Compressed Text feature will create a copy of your source code from which all comments, blank lines, and indentation have been removed. You can then load this compressed text into a new database which will become the distribution version of your application. This technique offers three important advantages:

Space Savings

Source code compression can significantly reduce the size of your database. A Microsoft Access database begins life at a size of 64 Kb. From there it grows (and shrinks) in increments of 32 Kb. Compressed text typically occupies 15 to 30 percent less space than uncompressed text. If your application contains a lot of code or a lot of comments, chances are you'll save 32 Kb, 64 Kb, or more after source code compression.

Cost-Free Coments

If you've been limiting your comments because you were concerned about the size of your application, you can now begin to comment more liberally, since your comments will not affect the size of the distribution version.

Improved Security

If you've decided not to encrypt your database, your source code will be more difficult to reverse engineer because none of the comments will be present.

Disclaimer

Black Bear Systems does not advocate a position with regard to the encryption of Microsoft Access databases. We simply acknowledge the fact that many databases are not encrypted and seek to provide Access developers with a means of improving the security of unencrypted databases.

Caution

Never load compressed text back into the development version of your application! To do so would mean the loss of all comments and formatting.


Reliability Checklist for Modules

Exported Identifiers

Be careful not to export any identifiers which may conflict with names that other databases use. A good way to avoid such conflicts is to begin all exported identifiers with a distinctive prefix.

To quickly review your exported identifiers, look at global constants, global variables, global procedures, and user-defined types using Tracker. If you are using a standard prefix, any inconsistencies will be visible at a glance.

Also make sure that you are not exporting constants, variables, or procedures that could be kept local to the modules in which they are defined. By keeping things local you eliminate the possibility of inadvertant access from outside of the module. This reduces the probability of errors and allows testing and debugging efforts to be more tightly focused.

Private Procedures

Inspect the list of private procedures provided by Tracker. Look for procedures that are also used in other modules. It frequently happens during development that small "helper" functions are copied from one module to another as they are needed. As development nears completion, it is a good idea to make an attempt to identify and combine these functions. This will reduce the overall number of procedures and will probably make the application easier to maintain, since future changes to the function need only be made in a single place.

Unused Items

As your application has evolved, some of the constants, variables, procedures, and parameters that you initially thought would be necessary may have fallen into disuse. Finding and eliminating these unused items allows you to concentrate on the code that's doing the job, and this can only have a positive effect upon the reliability of your application.


Creating a Distribution Version

The development version of an application typically contains test data, test code, and other objects not needed in the final distribution version. If included in the distribution version, these objects could have an undesirable effect on both the size and the performance of the application.

The following procedure is recommended for producing distribution versions of minimal size.

Save Modules

Save all needed modules from the development version to ASCII files using the Save Compressed Text feature of Tracker. Carefully record the ASCII file names to avoid confusion later.

Create a New Database

Create a new, empty database which will become the distribution version of your application.

Import Objects

Import all of the objects needed from the development version, except for modules.

Load Module Text

Import all modules using the Load Text feature of Access. You will need to create a new, temporary module to get started. After all module text has been loaded, compile the code to make certain that there are no errors.

Secure

You will probably need to restrict the permissions of the Users and Guests groups with respect to each database object. By default, members of the Users and Guests groups have read permissions for all objects. You may also wish to grant special permissions to other users or groups. After permissions have been assigned, each object's permission settings can easily be summarized and reviewed using Tracker.

Validate

Test the distribution version thoroughly.

Encrypt

As an optional last step, you may wish to encrypt the distribution version for added security.


Permission Settings

Each Microsoft Access database contains several system tables to which your permissions may be restricted. In addition, your permissions may also be restricted for other objects, such as tables or queries created by other users.

By default, Access disallows read access to the following system tables:

MSysACEs

MSysColumns

MSysIndexes

These tables and other objects in your database may contain information that is of interest to you. In order to view this information using Tracker, you will need to secure read permissions to these objects.

In order to change the permissions associated with an object, you must either be the object's owner (creator) or a member of the Admins group *. System tables are created automatically when a new database is created, and several are owned by the user who created the database.

Note

To set permissions for system tables, you must first make system objects visible. Select the View menu and choose Options. Then set the Show System Objects property to Yes.

Permissions Optional

Tracker always shows you as much information as possible given the permissions you currently possess. Tracker will notify you of any information which is unavailable due to restricted permissions, so you will always know just what, if anything, you are missing.

* Technically speaking, you must be a member of the Admins group of the SYSTEM.MDA file that was in use when the database was created, and this SYSTEM.MDA file must be in use at the time you wish to change the permission settings.


Printing

All Tracker output is displayed in the familiar Print Preview window, and is formatted for best appearance when printed on letter size (8 1/2 x 11 in) or A4 size (210 x 297 mm) paper with Portrait orientation.

Output Dimensions

The dimensions of the live area of the page (the area containing text) are:

Width	7.0 inches (178 mm)

Height	10.0 inches (254 mm)

These dimensions are fixed.

Margins

The default margin settings are:

Left	0.75 inches (19 mm)

Top	0.5 inches (13 mm)

Right	0.0 inches (0 mm)  (actual margin width depends upon paper size)

Bottom	0.45 inches (11 mm)  (actual margin height depends upon paper size)

The default margins should provide a satisfactory appearance for both letter size paper (8.5 x 11 in) and A4 size paper (210 x 297 mm). If A4 size paper is to be bound at the left edge, it may be necessary to increase the left margin by about 0.25 inches (6 mm).

Printing in landscape orientation and/or printing multiple logical pages per physical page are not supported in this version of Tracker.

Caution

It is possible, while in Print Preview, to select some other window and perform other tasks within Access. This practice is discouraged because of the possibility that the objects from which Tracker is obtaining information may be altered. This could lead to the subsequent display of incorrect information by Tracker.

If you select Condensed Output Mode, all properties having blank values are omitted from printed property lists. Any section whose entire property list is blank will be completely omitted.


International Considerations

Paper Size

All printed output is designed to work well with either letter size (8 1/2 x 11 in) or A4 size (210 x 297 mm) paper.

Dimensional Units

All dimensional units are displayed in inches or centimeters, according to the current setting in the Measurement field of the International Setup dialog in the Windows Control Panel. This behavior is consistent with that of Microsoft Access.

Date and Time Values

Tracker does not format dates and times according to the settings made in the International Setup dialog. All date and time values are displayed in the month/day/year format. All time values are displayed as 12-hour time values, with an AM or PM suffix attached.


Deinstalling Tracker

Step 1

Exit all current Microsoft Access sessions.

Step 2

Edit the file MSACCESS.INI located in the WINDOWS directory. Locate the [Libraries] section and remove the entry which references tracker.mda. Also locate the [Menu Add-Ins] section and remove the entry which references Tracker.

Step 3

Remove the Tracker directory and its entire contents from the hard disk.


Glossary
Tracker Glossary

A

accelerator key

active control

B

Boolean expression

C

compound index

D

datasheet properties

datasheet view

E

explicit permissions

exported identifier

event properties

F

fixed column headings

formal parameter

G

GROUP BY clause

grouped checkbox

grouped option button

grouped toggle button

H

HAVING clause

I

implicit permissions

L

logic diagram

M

macro call site

macro group

O

ORDER BY clause

P

passive control

procedure

Q

QBE grid

S

Security ID

SID

simple index

simplified logic

standalone checkbox

standalone option button

standalone toggle button

system tables

U

unlisted SID

unused constant

unused parameter

unused procedure

unused variable

W

WHERE clause


accelerator key

A key sequence that has been bound to a control or a menu item. Pressing the key sequence has the effect of selecting the control or menu item to which it is bound.


active/passive control

For a form, Tracker defines an active control as any control whose property list would include an OnEnter property.

For a report, Tracker defines an active control as any control whose property list would include a ControlSource property.

For both forms and reports, the active controls are generally the ones that "do something". Passive controls, on the other hand, are usually just design elements such as labels, rectangles, etc.

Subordinate controls, such as grouped option buttons, are considered "passive". Independent controls, such as standalone option buttons, are considered "active".


Boolean expression

An algebraic expression involving only True/False variables and the logical operations AND, OR, and NOT. The WHERE and HAVING clauses of SQL statements are examples of Boolean expressions.


compound index

An index involving more than one field.


datasheet properties

Properties of a form which affect its appearance in datasheet view.


datasheet view

A view of a table or query which displays the data in tabular format.


distribution version

A version of an application that is specially prepared for distribution to end users.


event properties

Properties of forms, form controls, reports, and report sections which cause designated responses to specific events. By viewing the event properties of a form or a report you can gain an understanding of the ways in which the object responds to its environment.


explicit permissions

Permissions granted to a user or to a group explicitly through the Permissions dialog.


exported identifier

Any constant, variable, procedure, or type definition contained in the module being inspected which is visible to other modules.

The following types of identifiers are always exported by the modules in which they are defined:

global constants

global variables

global (non-private) procedures

user-defined types


fixed column headings

For a crosstab query, fixed column headings specify the set of column values for which columns will be created. Fixed column headings may be entered in the Query Properties dialog.


formal parameter

A parameter appearing in the heading of a function or sub procedure.

The following function contains two formal parameters, A and B:

  Function Max(A, B)
    If A > B Then
      Max = A
    Else
      Max = B
    Endif
  End Function


GROUP BY clause

A portion of an SQL statement specifying how records will be grouped during the execution of a query.


grouped checkbox

A checkbox which is contained within an option group. Grouped checkboxes have Option Values instead of Control Sources.


grouped option button

An option button which is contained within an option group. Grouped option buttons have Option Values instead of Control Sources.


grouped toggle button

A toggle button which is contained within an option group. Grouped toggle buttons have Option Values instead of Control Sources.


HAVING clause

A portion of an SQL statement specifying which records will be included in a query's output after the input records have been grouped according to the GROUP BY clause.


implicit permissions

Permission granted to a user implicitly as a consequence of the user's group memberships. When a group is granted permissions, all of the group's members are implicitly granted those same permissions.


logic diagram

A graphical representation of a Boolean expression which uses standard AND and OR gate symbols whose inputs and outputs are connected by lines. The primary advantage of logic diagrams is that they completely eliminate the need for parentheses, thereby making complex and/or deeply nested expressions much easier to comprehend.


macro call site

Any place within an application from which a macro is called, including the event properties of forms and reports, and the RunMacro and AddMenu actions of macros.


macro group

A macro containing more than one entry point, each of which is identified by a unique label. Technically speaking, each separately labeled part of the macro group is a macro, however the term macro is often used to mean the entire macro group.


ORDER BY clause

A portion of an SQL statement which specifies how the query's output records are to be sorted.


procedure

Any Access Basic function or sub procedure.


QBE grid

Query-By-Example grid. The grid in which Access displays the structure of a query in Design View.


Security ID
Security ID (SID)

A binary string which uniquely identifies a user or a group within a workgroup (SYSTEM.MDA file).


simple index

An index based upon a single field.


simplified logic

A WHERE clause or a HAVING clause which has been converted to an equivalent form requiring fewer terms is said to be simplified. Tracker 1.0 performs a limited degree of simplification. In specific, Tracker 1.0 converts expressions of this type:

(A and B and C) or (A and D and E)

into expressions of this type:

A and ((B and C) or (D and E))


standalone checkbox

A checkbox which is not contained within an option group. Standalone checkboxes have Control Sources instead of Option Values.


standalone option button

An option button which is not contained within an option group. Standalone option buttons have Control Sources instead of Option Values.


standalone toggle button

A toggle button which is not contained within an option group. Standalone toggle buttons have Control Sources instead of Option Values.


system tables

A group of tables in which Microsoft Access stores information about the structure of a database.

System tables are normally hidden. To make them visible, select the View menu and choose Options. Then set the value of Show System Objects to Yes.

All system tables have names which begin with the prefix "MSys".


Unlisted SID

A system ID (SID) which is not listed in the current workgroup (SYSTEM.MDA file).


unused constant

A local constant which is not referenced within the procedure or module in which it is defined.

Unused constants have no effect upon the execution of your code and may safely be deleted if no future purpose for them is foreseen.


unused parameter

A formal parameter defined in a procedure heading which is not referenced within the procedure.

Unused parameters have no effect upon the execution of your code and may safely be deleted if no future purpose for them is foreseen.

Note: Deleting a parameter from a procedure heading will necessitate a corresponding change at every point from which the procedure is currently being referenced, including the event properties of forms, RunCode actions in macros, etc. In some cases, such changes may be undesirable or impossible. For example, a fill function used to supply values to a ComboBox or ListBox must define a fixed set of formal parameters, even though some of these may not be needed.


unused procedure

A private function or sub procedure which is not referenced within the module in which it is defined.

Unused procedures have no effectupon the execution of your code and may safely be deleted if no future purpose for them is foreseen.


unused variable

A local variable which is not referenced within the procedure in which it is defined.

Unused variables have no effect upon the execution of your code and may safely be deleted if no future purpose for them is foreseen.


WHERE clause

A portion of an SQL statement specifying which records will be included by a query. If the query contains a GROUP BY clause, grouping is performed upon the records that have been selected by the WHERE clause.